/*
* 数据缓存管理
* */
import 'dart:convert';
import 'dart:developer';
import 'package:lighthouse/index.dart';

class UserListCache {
  static const String _keyStr = "UserList";

  // 单例公开访问点
  factory UserListCache() => _sharedInstance();

  // 静态私有成员，没有初始化
  static UserListCache? _instance;

  // 私有构造函数
  UserListCache._() {
    // 具体初始化代码
  }

  // 静态、同步、私有访问点
  static UserListCache _sharedInstance() {
    return _instance ??= UserListCache._();
  }

  late bool _isLoadData = false;

  /*当前网络数据*/
  List<UserInfo>? _netData;

  /*历史缓存数据*/
  List<UserInfo>? _cacheData;

  /*加载网络数据*/
  Future loadNetData(BuildContext context) async {
    if (!_isLoadData) {
      _isLoadData = true;
      try {
        ResponseData<List<UserInfo>> responseData =
            await Api(context).getUserList();
        _netData = responseData.dataModel;
        //保存数据
        if (responseData.success) {
          Global.getPrefs().setString(_keyStr, jsonEncode(responseData.data));
        }
      } catch (e) {
        Debug.info(e.toString());
        _isLoadData = false;
        if (e is DioError) {
          //登录失败则提示
          showToast(e.response?.statusMessage ?? S.of(context).networkError);
        } else if (e is Error) {
          Debug.info(e.stackTrace.toString());
        }
      } finally {
        // 隐藏loading框
        // Navigator.of(context).pop();
      }
    }
    return _isLoadData;
  }

  /*获取当前数据*/
  List<UserInfo>? getCurrentData() {
    List<UserInfo>? mData;
    if (_netData != null) {
      // 如果有请求的数据 就返回请求的数据
      mData = _netData;
    } else if (_cacheData == null) {
      // 设置缓存数据
      var _cacheStr = Global.getPrefs().getString(_keyStr);
      if (_cacheStr != null) {
        try {
          mData = _cacheData = jsonDecode(_cacheStr)
              .map<UserInfo>((e) => UserInfo.fromJson(e))
              .toList();
        } on Error catch (e) {
          Debug.info(e.toString());
          Debug.info(e.stackTrace.toString());
        }
      }
    } else {
      mData = _cacheData;
    }
    return mData;
  }

  /*获取当前部门用户*/
  List<UserInfo>? getUserList(String deptId) {
    List<UserInfo>? mData = getCurrentData();
    if (mData != null) {
      List<UserInfo> list = [];
      for (UserInfo userInfo in mData) {
        if (userInfo.deptId == deptId) {
          list.add(userInfo);
        }
      }
      if (list.isNotEmpty) {
        return list;
      }
    }
    return null;
  }

  /*清楚数据*/
  void clearData() {
    _isLoadData = false;
    _netData = null;
    _cacheData = null;
    Global.getPrefs().remove(_keyStr);
  }

  static List<String>? UserInfoListToStringList(List<UserInfo>? UserInfoList) {
    if (UserInfoList != null && UserInfoList.isNotEmpty) {
      List<String> list = [];
      for (UserInfo userInfo in UserInfoList) {
        list.add(userInfo.name ?? "");
      }
      return list;
    } else {
      return null;
    }
  }
}
